# @time 2021/8/28-17:36
# @project 2021-08-28-装饰器作业 
# @author REP超超
"""
作业编写日志记录装饰器
    比如执行了func1函数，那就日志记录“执行了func1函数，花费多久时间” ，日志的格式要包含时间
    #日志要输出到文件（sc.log）和屏幕
"""
import logging
import random
import time


def Log_time(func):
    def inner(*args):
        start = time.time()
        func(*args)
        end = time.time()
        logger = logging.getLogger()
        # 获取logger对象，用于记录日志
        fh = logging.FileHandler("sc.log",encoding='utf-8')
        # 写入到sc.log文件
        formatter = logging.Formatter("%(asctime)s-%(levelname)s:%(message)s")
        # 创建formatter，用于设置日志格式
        fh.setFormatter(formatter)
        # 绑定formatter到handler
        logger.addHandler(fh)
        logger.setLevel(logging.DEBUG)
        # 设置日志等级
        logger.warning(f"{func.__name__}执行花费了{end - start}s")
        # 生成logger对象时，若没有传递参数进去，那生成的就是root logger
    return inner
@Log_time
def func1():
    print("welcome to sc!")
    time.sleep(1)

func1()

@Log_time
def bubble_sort(lst):
    for i in range(len(lst) - 1):  # 表示第i趟
        exchange = False  # 每一趟做标记
        for j in range(len(lst)-i-1):  # 表示箭头
            if lst[j] > lst[j+1]: # 此时是升序排序，>改为<则改为了降序
                lst[j],lst[j+1] = lst[j+1],lst[j]
                exchange = True  # 进行了交换，exchange标记为Ture
        # print(f"第{i+1}趟后的列表为：{lst}")  # 查看排序过程
        if not exchange: # 如果没有进行交换，直接返回，优化的步骤
            return
lst1 = [i for i in range(10000)]
random.shuffle(lst1)
print("***改进后的冒泡排序***")
bubble_sort(lst1)
